package com.fl.iocaop.aop;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.Arrays;

/**
 * aop面向切面编程
 * 不通过改变源码的方法给业务添加功能
 */
public class TestAop implements InvocationHandler {
    //创建的是谁的代理对象，就把对象传过来
    //有参构造传递
    private Object object;
    public TestAop(Object obj){
        this.object = obj;
    }

    public TestAop() {

    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //方法执行之前
        System.out.println("方法执行之前->"+method.getName()+"--传递参数->"+ Arrays.toString(args));
        //被增强的方法执行
        Object invoke = method.invoke(object, args);
        //方法执行之后
        System.out.println("方法执行之后->"+object);
        return invoke;
    }
}
